package cn.jasonone.jasonfx.util;

import cn.jasonone.jasonfx.annotation.FXController;
import cn.jasonone.jasonfx.annotation.FXWindow;
import cn.jasonone.jasonfx.properties.WindowProperty;

/**
 * 窗口工具类
 * 
 * @author Jason
 * @date: 2020-01-23 16:59
 */
public class WindowUtil {
	/**
	 * 检测对象是否是一个窗口
	 * 
	 * @param obj 待检测对象
	 * @return boolean
	 */
	public static boolean isWindow(Object obj) {
		if (obj == null)
			return false;
		return isWindow(obj.getClass());
	}

	/**
	 * 获得窗口属性
	 * 
	 * @param obj 窗口对象
	 * @return 属性对象
	 */
	public static WindowProperty getProperty(Object obj) {
		if (obj == null)
			return null;
		return getProperty(obj.getClass());
	}

	/**
	 * 获得窗口属性
	 * 
	 * @param type 窗口类
	 * @return 属性对象
	 */
	public static WindowProperty getProperty(Class<?> type) {
		if (isWindow(type)) {
			FXWindow fxWindow = AnnotationUtil.getAnnotation(type, FXWindow.class);
			WindowProperty property = new WindowProperty();
			property.setName(ControllerUtil.getControllerName(type));
			property.setTitle(fxWindow.title());
			property.setHeight(fxWindow.height());
			property.setWidth(fxWindow.width());
			property.setMain(fxWindow.main());
			return property;
		}
		return null;
	}

	/**
	 * 检测类是否是一个窗口
	 * 
	 * @param type 待检测类型
	 * @return boolean
	 */
	public static boolean isWindow(Class<?> type) {
		if (type == null)
			return false;
		if (AnnotationUtil.isAnnotations(type, FXWindow.class) && ControllerUtil.isController(type)) {
			if (ClassUtil.isAbstract(type) || ClassUtil.isInterface(type)) {
				return false;
			}
			return true;
		}
		return false;
	}
}
